#include "esp_mdns.h"
#include "device_discovery.h"
#include "esp_log.h"
#include <lwip/ip4_addr.h>
#include <lwip/ip6_addr.h>

#define TAG "DeviceDiscovery"

// 实现函数
void setup_device() {
    // 具体实现代码
    mdns_init();
    mdns_hostname_set("smart-light");

    // 添加服务
    mdns_service_add(NULL, "_http", "_tcp", 80, NULL, 0);

    // 或者设置静态 IP
    IPAddress static_ip(192, 168, 1, 100);
    IPAddress gateway(192, 168, 1, 1);
    IPAddress subnet(255, 255, 255, 0);
    WiFi.config(static_ip, gateway, subnet);
}

void discover_devices() {
    // 设置 mDNS 查询参数
    mdns_result_t* results = NULL;
    esp_err_t err = mdns_query_ptr("_http", "_tcp", 3000, 20, &results);

    if (err) {
        ESP_LOGE(TAG, "mDNS 查询失败: %s", esp_err_to_name(err));
        return;
    }

    if (!results) {
        ESP_LOGW(TAG, "未发现设备");
        return;
    }

    // 遍历发现的设备
    mdns_result_t* r = results;
    while (r) {
        ESP_LOGI(TAG, "发现设备: %s.local:%u", r->hostname, r->port);

        // 获取设备 IP 地址
        if (r->addr) {
            char addr_str[128];
            if (r->addr->addr.type == IPADDR_TYPE_V6) {
                inet6_ntoa_r(r->addr->addr.u_addr.ip6, addr_str, sizeof(addr_str));
            } else {
                inet_ntoa_r(r->addr->addr.u_addr.ip4, addr_str, sizeof(addr_str));
            }
            ESP_LOGI(TAG, "  IP: %s", addr_str);
        }

        // 获取设备服务信息
        if (r->txt_count > 0) {
            ESP_LOGI(TAG, "  设备信息:");
            for (int t = 0; t < r->txt_count; t++) {
                ESP_LOGI(TAG, "    %s=%s", r->txt[t].key, r->txt[t].value);
            }
        }

        r = r->next;
    }

    // 释放查询结果
    mdns_query_results_free(results);
}